LapageLa réalisation du projet est divisée en plusieurs parties présentées
dans les onglets suivants
Lapage - originellement une librairie physique avec
plusieurs points de vente a décidé depuis 2 ans d’ouvrir un site de
vente en ligne.
L’entreprise souhaite faire analyse de ses ventes en
ligne : de ses points forts, ses points faibles, les comportements
clients en ligne, pour pouvoir ensuite comparer avec la connaissance
acquise via librairies physiques, etc.
L’analyse contient deux
parties essentielles :
L’étude est réalisée à l’aide de trois jeux de données fourni par le
client :
Ces données, extraite du système de gestion du site web de
l’entreprise, sont relatives à une période comprise entre le 01 MARS
2021 et le 28 FÉVRIER 2023.
Ici on a présenté le traitement et la préparation de nos données pour
l’analyse suivante.
Importation des fichiers:
Fichier “Customers” : 5 premières lignes & Description des variables & Exploration
| client_id | sex | birth | |
|---|---|---|---|
| Length:8623 | Length:8623 | Min. :1929 | |
| Class :character | Class :character | 1st Qu.:1966 | |
| Mode :character | Mode :character | Median :1979 | |
| NA | NA | Mean :1978 | |
| NA | NA | 3rd Qu.:1992 | |
| NA | NA | Max. :2004 |
| client_id | sex | birth |
|---|---|---|
| c_4410 | f | 1967 |
| c_7839 | f | 1975 |
| c_1699 | f | 1984 |
| c_5961 | f | 1962 |
| c_5320 | m | 1943 |
Exploration des données
Recherche des
doublons
## integer(0)
## integer(0)
Vérification des valeurs de la variable ‘sex’:
## [1] "f" "m"
## row col
Fichier “Products” : 5 premières lignes & Description des variables & Exploration
| id_prod | price | categ |
|---|---|---|
| 0_1421 | 19.99 | 0 |
| 0_1368 | 5.13 | 0 |
| 0_731 | 17.99 | 0 |
| 1_587 | 4.99 | 1 |
| 0_1507 | 3.99 | 0 |
| id_prod | price | categ | |
|---|---|---|---|
| Length:3287 | Min. : -1.00 | Min. :0.0000 | |
| Class :character | 1st Qu.: 6.99 | 1st Qu.:0.0000 | |
| Mode :character | Median : 13.06 | Median :0.0000 | |
| NA | Mean : 21.86 | Mean :0.3702 | |
| NA | 3rd Qu.: 22.99 | 3rd Qu.:1.0000 | |
| NA | Max. :300.00 | Max. :2.0000 |
Recherches des doublons
## integer(0)
## integer(0)
Ouliers dans “Products”
## id_prod price categ
## 732 T_0 -1 0
Vérification de id_prod “T_0”
## id_prod price categ
## 732 T_0 -1 0
Tout d’abord le prix égaux à -1 n’est pas possible. En plus, on verra plus tard que id_prod appellé ‘T_0’ correspend à une procedure de vérification du fonctionnement de systeme. Donc cela ne convient pas pour notre analyse : on enleve cette ligne.
Elimination d’outlier
## id_prod price categ
## Length:3286 Min. : 0.62 Min. :0.0000
## Class :character 1st Qu.: 6.99 1st Qu.:0.0000
## Mode :character Median : 13.07 Median :0.0000
## Mean : 21.86 Mean :0.3704
## 3rd Qu.: 22.99 3rd Qu.:1.0000
## Max. :300.00 Max. :2.0000
Verification sur la presence id_prod = 0_2245
## [1] id_prod price categ
## <0 lignes> (ou 'row.names' de longueur nulle)
Fichier “Transactions” : 5 premières lignes & Description des variables & Exploration
| id_prod | date | session_id | client_id |
|---|---|---|---|
| 0_1518 | 2022-05-20 13:21:29.043970 | s_211425 | c_103 |
| 1_251 | 2022-02-02 07:55:19.149409 | s_158752 | c_8534 |
| 0_1277 | 2022-06-18 15:44:33.155329 | s_225667 | c_6714 |
| 2_209 | 2021-06-24 04:19:29.835891 | s_52962 | c_6941 |
| 0_1509 | 2023-01-11 08:22:08.194479 | s_325227 | c_4232 |
| id_prod | date | session_id | client_id | |
|---|---|---|---|---|
| Length:679532 | Length:679532 | Length:679532 | Length:679532 | |
| Class :character | Class :character | Class :character | Class :character | |
| Mode :character | Mode :character | Mode :character | Mode :character |
Changement de date en type ‘date’
## [1] "list"
## [1] "character"
## Warning: 200 failed to parse.
On trouve 200 valeurs non-definies :
Verification des lignes avec des dates non-definies:
Selection du produit ‘T_0’| id_prod | date | session_id | client_id | |
|---|---|---|---|---|
| 3020 | T_0 | test_2021-03-01 02:30:02.237419 | s_0 | ct_0 |
| 5139 | T_0 | test_2021-03-01 02:30:02.237425 | s_0 | ct_0 |
| 9669 | T_0 | test_2021-03-01 02:30:02.237437 | s_0 | ct_1 |
| 10729 | T_0 | test_2021-03-01 02:30:02.237436 | s_0 | ct_0 |
| 15293 | T_0 | test_2021-03-01 02:30:02.237430 | s_0 | ct_0 |
On trouve que ces lignes correspendent au test ‘T_0’
## [1] "Nombre de lignes: 200 "
Elimination des lignes outliers
## [1] 200
Nombre de lignes completes
## [1] 679332
## id_prod date session_id client_id
## 679532 679332 679532 679532
Elimination des lignes avec date non-definie
## id_prod date session_id
## Length:679332 Min. :2021-03-01 00:01:07.00 Length:679332
## Class :character 1st Qu.:2021-09-08 09:14:25.00 Class :character
## Mode :character Median :2022-03-03 07:50:20.50 Mode :character
## Mean :2022-03-03 15:13:18.80
## 3rd Qu.:2022-08-30 23:57:07.75
## Max. :2023-02-28 23:58:30.00
## client_id
## Length:679332
## Class :character
## Mode :character
##
##
##
## id_prod date session_id client_id
## 679332 679332 679332 679332
Recherche des doublons dans ‘transaction1’
## integer(0)
Agrégation des données de tables “Products” et “Transaction” préparés
| client_id | id_prod | price | categ | date | session_id | sex | birth |
|---|---|---|---|---|---|---|---|
| c_1 | 0_1448 | 18.94 | 0 | 2021-07-26 17:37:29 | s_67467 | m | 1955 |
| c_1 | 1_713 | 33.99 | 1 | 2021-11-15 20:40:00 | s_120172 | m | 1955 |
| c_1 | 0_1429 | 7.99 | 0 | 2021-10-15 11:28:24 | s_105105 | m | 1955 |
| c_1 | 0_1475 | 11.99 | 0 | 2022-06-27 10:30:00 | s_230001 | m | 1955 |
Chanegement du format de la date
## client_id id_prod price categ date session_id sex birth
## 33 c_1 0_1470 19.53 0 2021-06-11 21:02 s_47346 m 1955
## 15 c_1 0_513 11.99 0 2021-07-21 22:41 s_65433 m 1955
## 13 c_1 0_1186 12.30 0 2021-07-25 12:17 s_66947 m 1955
## 1 c_1 0_1448 18.94 0 2021-07-26 17:37 s_67467 m 1955
## 23 c_1 0_1475 11.99 0 2021-07-27 10:30 s_67769 m 1955
## 7 c_1 0_1378 13.96 0 2021-08-23 16:56 s_79696 m 1955
Addition de la colonne ‘year’
| client_id | id_prod | price | categ | date | session_id | sex | birth | year | |
|---|---|---|---|---|---|---|---|---|---|
| 33 | c_1 | 0_1470 | 19.53 | 0 | 2021-06-11 21:02 | s_47346 | m | 1955 | 2021 |
| 15 | c_1 | 0_513 | 11.99 | 0 | 2021-07-21 22:41 | s_65433 | m | 1955 | 2021 |
| 13 | c_1 | 0_1186 | 12.30 | 0 | 2021-07-25 12:17 | s_66947 | m | 1955 | 2021 |
| 1 | c_1 | 0_1448 | 18.94 | 0 | 2021-07-26 17:37 | s_67467 | m | 1955 | 2021 |
| 23 | c_1 | 0_1475 | 11.99 | 0 | 2021-07-27 10:30 | s_67769 | m | 1955 | 2021 |
Nom des colonnes ayant non-definies dans leurs valeurs:
## character(0)
## [1] client_id id_prod price categ date session_id sex
## [8] birth year
## <0 lignes> (ou 'row.names' de longueur nulle)
## character(0)
Verification de la dublication de date de naissance pour chaque clien_id
## [1] 8600
## integer(0)
## [1] 8600
Verification de la variation de sex pour chaque clien_id
## [1] 8600
## integer(0)
## [1] 8600
Verification de la variation price pour chaque id_prod
## [1] 3265
## integer(0)
## [1] 0
## integer(0)
Verification de la variation sex pour chaque session_id
## [1] 342275
## integer(0)
## [1] 342275
## integer(0)
Le jeu des données prêt à l’analyse:
| client_id | id_prod | price | categ | date | session_id | sex | birth | year | |
|---|---|---|---|---|---|---|---|---|---|
| 33 | c_1 | 0_1470 | 19.53 | 0 | 2021-06-11 21:02 | s_47346 | m | 1955 | 2021 |
| 15 | c_1 | 0_513 | 11.99 | 0 | 2021-07-21 22:41 | s_65433 | m | 1955 | 2021 |
| 13 | c_1 | 0_1186 | 12.30 | 0 | 2021-07-25 12:17 | s_66947 | m | 1955 | 2021 |
| 1 | c_1 | 0_1448 | 18.94 | 0 | 2021-07-26 17:37 | s_67467 | m | 1955 | 2021 |
| 23 | c_1 | 0_1475 | 11.99 | 0 | 2021-07-27 10:30 | s_67769 | m | 1955 | 2021 |
| 7 | c_1 | 0_1378 | 13.96 | 0 | 2021-08-23 16:56 | s_79696 | m | 1955 | 2021 |
Cette partie contient:
Les sources de données:
Les données prêtes a être analysées:
| client_id | id_prod | price | categ | date | session_id | sex | birth | year | |
|---|---|---|---|---|---|---|---|---|---|
| 33 | c_1 | 0_1470 | 19.53 | 0 | 2021-06-11 21:02 | s_47346 | m | 1955 | 2021 |
| 15 | c_1 | 0_513 | 11.99 | 0 | 2021-07-21 22:41 | s_65433 | m | 1955 | 2021 |
| 13 | c_1 | 0_1186 | 12.30 | 0 | 2021-07-25 12:17 | s_66947 | m | 1955 | 2021 |
| 1 | c_1 | 0_1448 | 18.94 | 0 | 2021-07-26 17:37 | s_67467 | m | 1955 | 2021 |
| 23 | c_1 | 0_1475 | 11.99 | 0 | 2021-07-27 10:30 | s_67769 | m | 1955 | 2021 |
| 7 | c_1 | 0_1378 | 13.96 | 0 | 2021-08-23 16:56 | s_79696 | m | 1955 | 2021 |
Outliers:
id_prod = ‘T_0’ : 200 lignes du fichier ‘transaction’ ==> verification de la fonctionnement du systeme
price = -1 : elimination car id_prod correspendant = ‘T_0’
Valeurs aberrantes pour le CA :
4 client_id et les chiffre d’affaire correspondants:
Dans cette partie les différents indicateurs et graphiques autour du
chiffre d’affaires sont présentés.
On a également étudié l’évolution
dans le temps de CA et on a mis en place une décomposition en moyenne
mobile pour évaluer la tendance globale.
Pour cette reason le
repartition du CA est présenté par identifiant client.
Les sujets abordés:
Les statistiques et les méthodes utilisées:
Présentation du jeu de données
| client_id | id_prod | price | categ | date | session_id | sex | birth | year | |
|---|---|---|---|---|---|---|---|---|---|
| 33 | c_1 | 0_1470 | 19.53 | 0 | 2021-06-11 21:02 | s_47346 | m | 1955 | 2021 |
| 15 | c_1 | 0_513 | 11.99 | 0 | 2021-07-21 22:41 | s_65433 | m | 1955 | 2021 |
| 13 | c_1 | 0_1186 | 12.30 | 0 | 2021-07-25 12:17 | s_66947 | m | 1955 | 2021 |
| 1 | c_1 | 0_1448 | 18.94 | 0 | 2021-07-26 17:37 | s_67467 | m | 1955 | 2021 |
| 23 | c_1 | 0_1475 | 11.99 | 0 | 2021-07-27 10:30 | s_67769 | m | 1955 | 2021 |
| 7 | c_1 | 0_1378 | 13.96 | 0 | 2021-08-23 16:56 | s_79696 | m | 1955 | 2021 |
Chiffre d’affaires total
## [1] 11853729
Creation d’une nouvelle table de CA pour chaque identifiant clientL’étude de chiffre d’affaires et sa répartittion
| client_id | CA_client |
|---|---|
| c_1 | 558.18 |
| c_10 | 1353.60 |
| c_100 | 254.85 |
| c_1000 | 2261.89 |
| c_1001 | 1812.86 |
| c_1002 | 415.78 |
## [1] 11853729
Présentation graphique de la distribution du chiffre d’affaires
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.3 547.6 1027.0 1378.3 1779.5 324033.3
Observation de maximal chiffre d’affaire par client
## client_id CA_client
## 678 c_1609 324033.3
| client_id | id_prod | price | categ | date | session_id | sex | birth | year | |
|---|---|---|---|---|---|---|---|---|---|
| 74692 | c_1609 | 0_1304 | 5.86 | 0 | 2021-03-01 00:07 | s_7 | m | 1980 | 2021 |
| 60033 | c_1609 | 0_1159 | 7.99 | 0 | 2021-03-01 00:11 | s_7 | m | 1980 | 2021 |
| 71230 | c_1609 | 0_1425 | 12.99 | 0 | 2021-03-01 01:56 | s_46 | m | 1980 | 2021 |
| 53260 | c_1609 | 0_1469 | 14.99 | 0 | 2021-03-01 02:12 | s_53 | m | 1980 | 2021 |
| 50111 | c_1609 | 1_406 | 24.81 | 1 | 2021-03-01 02:41 | s_63 | m | 1980 | 2021 |
| 62064 | c_1609 | 1_730 | 22.65 | 1 | 2021-03-01 02:44 | s_53 | m | 1980 | 2021 |
Suppression des outliers (valeurs aberrantes maximales)
Il y a 4 client_id ayant les CA aberrantes maximales. Afin que notre analyse soit pertinant, on va éliminaire les valeurs aberrantes de nos données.
Comparaison de la distribution de CA par client avant et apres l’imputation.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.3 547.6 1027.0 1378.3 1779.5 324033.3
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.31 547.29 1026.85 1276.49 1778.32 5276.87
Distribution de chiffre d’affaire par client modifiée
Histogram des CA_client-s sans les valeurs aberrantes
Les nombres des clients et les CA correspendant au groupes principeaux
Les clients de grands comptes
## [1] 4158.43
## [1] 236
Les clients de comptes moyens
## [1] 1193.089
## [1] 8353
Les clients de très grands comptes
## [1] 220257.6
## [1] 4
L’écart-type de chiffre d’affaires
## [1] 954.1823
Skewness > 0, confirmation que la distribution est étalée à droit
## [1] 1.161649
kurtosis >3 => distribution leptokurtique : Majorité des chiffres d’affaire par client autours 500 eusros
## [1] 4.09493
L’évolution du chiffre d’affaires dans le temps
Creation d’une nouvelle table: L’évolution de CA dans le temps par mois
Evolution des MMC
Les coefficients saisoniers moyens par mois
Vérification de la somme des coefficients saisoniers Table de coefficients saisoniers ajustés
## [1] "La somme des coefficients saisoniers = 11.978"
Table de moyennes mobiles
| month1 | month | CA_month | MMC | coeff_saisonier | coeff_saisonier_ajustes | ca_desaisonnalise | |
|---|---|---|---|---|---|---|---|
| 5 | 03 | 2021:03 | 445918.7 | NA | NA | 0.9853714 | 452538.7 |
| 7 | 04 | 2021:04 | 439337.8 | 442628.3 | 0.9925662 | 0.9876262 | 444842.3 |
| 9 | 05 | 2021:05 | 454887.5 | 447112.7 | 1.0173889 | 1.0222932 | 444967.7 |
| 11 | 06 | 2021:06 | 447102.2 | 450994.8 | 0.9913688 | 0.9858446 | 453522.0 |
| 13 | 07 | 2021:07 | 447593.2 | 447347.7 | 1.0005488 | 1.0108458 | 442790.7 |
| 15 | 08 | 2021:08 | 446002.3 | 446797.7 | 0.9982197 | 0.9989492 | 446471.5 |
| 17 | 09 | 2021:09 | 470921.8 | 458462.0 | 1.0271773 | 1.0098188 | 466342.9 |
| 19 | 10 | 2021:10 | 296728.3 | 383825.1 | 0.7730822 | 0.8945075 | 331722.6 |
| 21 | 11 | 2021:11 | 478092.1 | 387410.2 | 1.2340720 | 1.1129784 | 429561.0 |
| 23 | 12 | 2021:12 | 487723.4 | 482907.7 | 1.0099722 | 1.0128541 | 481533.7 |
| 1 | 01 | 2022:01 | 488810.1 | 488266.7 | 1.0011128 | 1.0082187 | 484825.4 |
| 3 | 02 | 2022:02 | 492927.1 | 490868.6 | 1.0041936 | 0.9706921 | 507810.0 |
| 6 | 03 | 2022:03 | 476948.8 | 484938.0 | 0.9835254 | 0.9853714 | 484029.5 |
| 8 | 04 | 2022:04 | 457316.1 | 467132.5 | 0.9789859 | 0.9876262 | 463045.7 |
| 10 | 05 | 2022:05 | 479200.0 | 468258.0 | 1.0233674 | 1.0222932 | 468750.0 |
| 12 | 06 | 2022:06 | 457310.8 | 468255.4 | 0.9766268 | 0.9858446 | 463877.1 |
| 14 | 07 | 2022:07 | 473465.0 | 465387.9 | 1.0173556 | 1.0108458 | 468384.9 |
| 16 | 08 | 2022:08 | 469632.1 | 471548.5 | 0.9959359 | 0.9989492 | 470126.2 |
| 18 | 09 | 2022:09 | 459115.7 | 464373.9 | 0.9886768 | 1.0098188 | 454651.6 |
| 20 | 10 | 2022:10 | 470815.5 | 464965.6 | 1.0125813 | 0.8945075 | 526340.5 |
| 22 | 11 | 2022:11 | 459387.9 | 465101.7 | 0.9877150 | 1.1129784 | 412755.5 |
| 24 | 12 | 2022:12 | 470491.8 | 464939.9 | 1.0119412 | 1.0128541 | 464520.8 |
| 2 | 01 | 2023:01 | 481484.5 | 475988.2 | 1.0115472 | 1.0082187 | 477559.6 |
| 4 | 02 | 2023:02 | 421485.4 | 451485.0 | 0.9335536 | 0.9706921 | 434211.3 |
Nombre de lignes
## [1] 24
Evolution de CA désaisonnalisé
Realisation de la prévision grace à une droite de la régression linéaire. On utilise le méthode de moindre carrés.
a= coefficient directeur de notre regression linéaire : qoutient de covarience entre la sequence des nombre des mois et chiffres d’affaires desaisonnalisé par mois et varience de sequence des mois
b= ordonné à l’origine : la difference entre la moyenne de chiffres d’affaires desaisonnalisé et produit de coefficient directeur et moyenne de sequence des mois
## [1] "a:"
## [1] 1157.544
## [1] "b:"
## [1] 442829.9
## [1] 24
## [1] 24
Construction de la tendance
Tendance d’évaluation du chiffre d’affaires jusqu’a Fév. 2024 (si un résidu epsilon ne surgisse pas )
Repartition de Chiffre d’affaires par categories
| categ | CA |
|---|---|
| 0 | 4119201 |
| 1 | 4349433 |
| 2 | 2504064 |
Problématique : évaluer la dépendence du chiffre d’affaire en fonction de la catégorie de livres
Choix du test : On a 2 variables: - chiffre d’affaires - variable quantitative continue - categorie de livre - variable qualitative avec plus que 2 groupes
Par conséquent le choix de notre test - test ANOVA avec le facteur = chiffre d’affaires, les groupes= 3 categories de livres
Anova, test de Ficher pour la repartition de CA par categories
Préparation de données
## categ client_id price
## 1 0 c_1 360.15
## 2 1 c_1 143.16
## 3 2 c_1 54.87
## 4 0 c_10 263.87
## 5 1 c_10 809.77
## 6 2 c_10 279.96
Modèle du test.
Problémathique: Est_ce que les chiffre d’affaires sont liés à categorie de livre?
L’hypothèse H0 : CA et categorie de livres sont indépendants
L’hypothèse H1 : CA et categorie sont liés
Méthodologie:
Interpretation:
soit
Application du Test
## Call:
## aov(formula = price ~ categ, data = ag_ca)
##
## Terms:
## categ Residuals
## Sum of Squares 53456146 6425047257
## Deg. of Freedom 1 19932
##
## Residual standard error: 567.7573
## Estimated effects may be unbalanced
## Df Sum Sq Mean Sq F value Pr(>F)
## categ 1 5.346e+07 53456146 165.8 <2e-16 ***
## Residuals 19932 6.425e+09 322348
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Vérification des conditions du test ANOVA:
Vérification sur la normalité des residus
Dans le graphique ci-dessous, les quantiles des résidus sont tracés par rapport aux quantiles de la distribution normale. Une ligne de référence de 45 degrés est également tracée.
La courbe de probabilité normale des résidus est utilisée pour vérifier l’hypothèse selon laquelle les résidus sont normalement répartis. Il devrait suivre approximativement une ligne droite qui correspend bien à la distribution normale.
On voit le décallage de notre probabilité normale des résidus. Cela
signifie que nos résidus ne suivent pas une loi normale, donc la
condition du test ANOVA n’est pas réspectée.
Dans ce cas on applique un test non-parametrique: ** Test de Kruskal-Wallis**
## # A tibble: 1 × 6
## .y. n statistic df p method
## * <chr> <int> <dbl> <int> <dbl> <chr>
## 1 price 19934 221. 2 1.21e-48 Kruskal-Wallis
## # A tibble: 1 × 5
## .y. n effsize method magnitude
## * <chr> <int> <dbl> <chr> <ord>
## 1 price 19934 0.0110 eta2[H] small
L’estimation eta-carré:
0,01- < 0,06 (petit effet), 0,06 - < 0,14 (effet modéré) et >= 0,14 (effet important).
Dans notre cas l’effet est minimal est presque égal à 0 .
**Conclusion:
Le chiffre d’affaires de depend pas de categorie de livres**
Distribution du chiffre d’affaires par catégorie